package modular02.work01;

/**
 * 1.定义一个长度为[16][16]的整型二维数组并输入所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
 * 2.再分别实现二维数组中左上角到右下角 和 右上角到左下角所有元素的累加和并打印。
 *
 * @author 陈洛健
 */
public class Work01 {

    /**
     * 通过行打印所有元素的和
     *
     * @param arr
     * @return
     */
    public static int printArrayLine(int[][] arr) {

        int count = 0;

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                count += arr[i][j];
            }
        }

        return count;

    }

    /**
     * 通过列打印二维数组中所有元素的和 通过j控制列 i控制行 外循环中 循环条件直接判断arr[0]的length就可以了，只需要判断还有没有下一列
     *
     * @param arr 调用的二维数组
     * @return 和
     */
    public static int printArrayColumn(int[][] arr) {

        int count = 0;
        int j = 0, k = 0;
        for (j = 0; j < arr[0].length; j++) {
            for (int i = 0; i < arr.length; i++) {
                count += arr[i][j];
            }

        }

        return count;

    }

    /**
     * 打印二维数组中，左上角到右下角的和
     *
     * @return
     */
    public static int printLeftTopToLowerRightCount(int[][] arr) {
        int count = 0;

        int i = 0, j = 0;
        while (i < arr.length && j < arr[i].length) {
            count += arr[i][j];
            i++;
            j++;
        }

        return count;

    }

    /**
     * 打印二维数组右上角到左下角的所有元素的和
     *
     * @param arr 调用的二维数组
     * @return 和
     */
    public static int printRightTopToLowerLeft(int[][] arr) {
        int count = 0;
        int i = arr.length - 1, j = arr[i].length - 1;

        while (i >= 0 && j >= 0) {
            count += arr[i][j];
            i--;
            j--;
        }


        return count;


    }

    public static void main(String[] args) {
        int[][] arr = new int[5][5];

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = j;
            }
        }

        System.out.println(printRightTopToLowerLeft(arr));
    }

}
